package com.cardone.platform.configuration.dao;

import java.util.List;

import com.cardone.common.dto.PaginationDto;
import com.cardone.platform.configuration.dto.DictionaryDto;

/**
 * 字典
 *
 * @author yaohaitao
 *
 */
public interface DictionaryDao {
	/**
	 * sql标识
	 *
	 * @author yaohaitao
	 *
	 */
	public enum SqlIds {
		/**
		 * 删除
		 */
		@Deprecated
		deleteByIds,

		/**
		 * 查询
		 */
		@Deprecated
		findByCode,

		/**
		 * 查询
		 */
		@Deprecated
		findById,

		/**
		 * 查询
		 */
		@Deprecated
		findByLikeCode,

		/**
		 * 查询
		 */
		findByTypeCode,

		/**
		 * 查询
		 */
		findByTypeCodeAndCode,

		/**
		 * 查询
		 */
		findByTypeId,

		/**
		 * 插入
		 */
		@Deprecated
		insertByCode,

		/**
		 * 读取
		 */
		@Deprecated
		readByCode,

		/**
		 * 读取
		 */
		@Deprecated
		readByLikeCode,

		/**
		 * 更新
		 */
		@Deprecated
		updateByCode;

		/**
		 * 根目录
		 */
		private static final String ROOT = "/platform/configuration/dictionary/";

		/**
		 * 标识
		 */
		private final String id;

		/**
		 * sql标识
		 */
		private SqlIds() {
			this.id = SqlIds.ROOT + this.name();
		}

		/**
		 * 获取
		 *
		 * @return sql标识
		 */
		public String id() {
			return this.id;
		}
	}

	/**
	 * 查询
	 *
	 * @param mappedClass
	 *          返回类型
	 *
	 * @param typeId
	 *          类型标识
	 *
	 * @return 字典对象集合
	 */
	<P> List<P> findListByTypeId(final Class<P> mappedClass, final String typeId);

	/**
	 * 查询
	 *
	 * @param mappedClass
	 *          返回类型
	 *
	 * @param typeCode
	 *          类型代码
	 *
	 * @return 字典对象集合
	 */
	<P> List<P> findListByTypeCode(final Class<P> mappedClass, final String typeCode);

	/**
	 * 查询
	 *
	 * @param mappedClass
	 *          返回类型
	 *
	 * @param typeCode
	 *          类别代码
	 * @param code
	 *          代码
	 *
	 * @return 返回对象
	 */
	<P> P findByTypeCodeAndCode(final Class<P> mappedClass, final String typeCode, final String code);

	/**
	 * 保存:字典
	 *
	 * @param mappedClass
	 *          返回类型
	 *
	 * @param saveDictionary
	 *          字典对象
	 *
	 * @return 字典对象
	 */
	<P> P saveByIdOrCode(final Class<P> mappedClass, final DictionaryDto saveDictionary);

	/**
	 * 插入
	 *
	 * @param insertDictionary
	 *          字典对象
	 *
	 * @return 影响行数
	 */
	@Deprecated
	int insertByCode(final DictionaryDto insertDictionary);

	/**
	 * 删除
	 *
	 * @param deleteDictionary
	 *          字典对象
	 *
	 * @return 影响行数
	 */
	@Deprecated
	int deleteByIds(final DictionaryDto deleteDictionary);

	/**
	 * 更新
	 *
	 * @param updateDictionary
	 *          字典对象
	 *
	 * @return 影响行数
	 */
	@Deprecated
	int updateByCode(final DictionaryDto updateDictionary);

	/**
	 * 查询
	 *
	 * @param readDictionary
	 *          字典对象
	 * @return 返回数据
	 */
	@Deprecated
	Integer readByCodeNqIdForCount(final DictionaryDto readDictionary);

	/**
	 * 查询
	 *
	 * @param mappedClass
	 *          返回类型
	 *
	 * @param findDictionary
	 *          字典对象
	 * @return 返回对象
	 */
	<P> P findById(final Class<P> mappedClass, final DictionaryDto findDictionary);

	/**
	 * 查询
	 *
	 * @param mappedClass
	 *          返回类型
	 *
	 * @param findDictionary
	 *          字典对象
	 *
	 * @return 返回对象
	 */
	@Deprecated
	<P> P findByCodeOrId(final Class<P> mappedClass, final DictionaryDto findDictionary);

	/**
	 * 查询
	 *
	 * @param mappedClass
	 *          返回类型
	 *
	 * @param findListDictionary
	 *          字典对象
	 *
	 * @return 字典对象集合
	 */
	@Deprecated
	<P> List<P> findListByLikeCode(final Class<P> mappedClass, final DictionaryDto findListDictionary);

	/**
	 * 分页
	 *
	 * @param mappedClass
	 *          返回类型
	 *
	 * @param paginationDictionary
	 *          字典对象
	 *
	 * @return 字典分页对象
	 */
	@Deprecated
	<P> PaginationDto<P> paginationByLikeCode(final Class<P> mappedClass, final DictionaryDto paginationDictionary);
}